package com.example.leetcode.prcatice;

import java.util.Arrays;

/**
 * 给定链表头结点 head，该链表上的每个结点都有一个 唯一的整型值 。
 *
 * <p>同时给定列表 G，该列表是上述链表中整型值的一个子集。
 *
 * <p>返回列表 G 中组件的个数，这里对组件的定义为：链表中一段最长连续结点的值（该值必须在列表 G 中）构成的集合
 *
 * <p>来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/linked-list-components
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test817 {

  public int numComponents(ListNode head, int[] nums) {
    Arrays.sort(nums); // 对nums 进行排序
    ListNode pre = head;
    int count = 0;
    int j = -1;
    while (pre != null) {
      int value = pre.val;
      int i = Arrays.binarySearch(nums, value);
      if (j < 0 && i >= 0) {
        count++;
      }
      j = i;
      pre = pre.next;
    }
    return count;
  }
}



class Demo817{
  public static void main(String[] args) {
    int[] nums = {0,3,1,4};
    ListNode head = new ListNode(0);
    head.next = new ListNode(1);
    head.next.next = new ListNode(2);
    head.next.next.next = new ListNode(3);
    head.next.next.next.next = new ListNode(4);
    Test817 t = new Test817();
    int i = t.numComponents(head, nums);
    System.out.println(i);
  }
}